﻿using System.Web.Mvc;
using MvcPresenter.Models;

namespace MvcPresenter
{
	/// ValueProviderFactoryを定義しない従来の手法だと、ModelBinderを作成して
	/// 以下のように自分でマップしたモデルに対してValidationを実行することになります。
	public class PresentationModelBinder : DefaultModelBinder
	{
		public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
		{
			// ここでモデルを生成してModelMetadataに入れておくと、
			// CreateModelでは生成せずに、OnModelUpdating/OnModelUpdated
			// を内部で呼び出してくれるようになる。
			// でも、この書き方であってるのか自信無いですが．．．。
			
            var valueResult = bindingContext.ValueProvider.GetValue("Name");
            var model = StorageAccessor.Load(PresentationZipValueProviderFactory.UploadTempPath, true, valueResult.AttemptedValue);
            bindingContext.ModelMetadata.Model = model;
			
			return base.BindModel(controllerContext, bindingContext);
		}
	}
}
